from django.shortcuts import render, redirect

from StuApp.models import StudentInfo, ClassInfo, GradeInfo


def index(request):
    """
    首页视图函数
    功能：
        1. 检查用户是否已登录
        2. 如果未登录则重定向到登录页面
        3. 如果已登录则渲染首页，显示统计数据和图表
    参数：
        request: HTTP请求对象
    返回：
        重定向到登录页面或渲染后的首页
    """
    # 检查session中是否存在user_id，判断用户是否已登录
    if not request.session.get('user_id'):
        # 如果未登录，重定向到登录页面，并传递next参数以便登录后跳转回首页
        return redirect(f'login?next={request.path}')

    # 统计数据
    class_count = ClassInfo.objects.count()
    student_count = StudentInfo.objects.count()
    grade_count = GradeInfo.objects.count()
    profession_count = len(StudentInfo.profession_choices)

    # 性别比例
    male_count = StudentInfo.objects.filter(student_gender='1').count()
    female_count = StudentInfo.objects.filter(student_gender='2').count()

    # 年级班级数统计
    grade_data = []
    for grade_info in GradeInfo.objects.all():
        grade_data.append({
            'name': grade_info.get_grade_id_display(),
            'count': ClassInfo.objects.filter(grade_id=grade_info.grade_id).count()
        })

    # 专业分布
    profession_data = []
    for code, name in StudentInfo.profession_choices:
        count = StudentInfo.objects.filter(student_profession=code).count()
        profession_data.append({'name': name, 'count': count})

    context = {
        'class_count': class_count,  # 班级数
        'student_count': student_count,  # 学生数
        'grade_count': grade_count,  # 年级数
        'profession_count': profession_count,  # 专业数
        'male_count': male_count,  # 男生数
        'female_count': female_count,  # 女生数
        'profession_data': profession_data,  # 专业分布
        'grade_data': grade_data,  # 年级班级数统计
    }
    return render(request, "index.html", context)


def layout(request):
    """
    布局页面视图函数
    功能：
        1. 渲染布局页面
    参数：
        request: HTTP请求对象
    返回：
        渲染后的布局页面
    """
    return render(request, "layout_index.html")
